package com.tansuo365.test1.service.kucunservice.kucunimpl;

import com.tansuo365.test1.bean.kucunbean.DaohuoDetails;
import com.tansuo365.test1.bean.kucunbean.DaohuoZong;
import com.tansuo365.test1.bean.kucunbean.WuliaoKucunRiZhi;
import com.tansuo365.test1.bean.kucunbean.WuliaoKucunSear;
import com.tansuo365.test1.bean.otherbean.DWuliao;
import com.tansuo365.test1.mapper.kucunmapper.WuliaoKucunRiZhiMapper;
import com.tansuo365.test1.mapper.kucunmapper.WuliaoKucunSearMapper;
import com.tansuo365.test1.service.kucunservice.WuliaoKucunSearService;
import com.tansuo365.test1.util.StringUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class WuliaoKucunSearServiceImpl implements WuliaoKucunSearService {

    @Resource
    private WuliaoKucunSearMapper wuliaoKucunSearMapper;
    @Resource
    private WuliaoKucunRiZhiMapper wuliaoKucunRiZhiMapper;

    @Override
    public int deleteByPrimaryKey(Integer id) {
        return wuliaoKucunSearMapper.deleteByPrimaryKey(id);
    }

    @Override
    public int insertWuliaoToKucunWhenWuliaoBiao(List<DWuliao> list) {
        int i = 0;
        int i1 = 0;
        //加入到库存,一是到主表,二是到子表
        //主表是直接插入该物料
        //子表是占个名称位置
        for (DWuliao dWuliao : list) {
            //wuliao转换为库存能存储的形式,存到 物料库存 和 物料日志

            String dalei = dWuliao.getDalei();
            String danwei = dWuliao.getDanwei();
            String wuliaobianma = dWuliao.getWuliaobianma();
            String mingchengguige = dWuliao.getMingchengguige();

            WuliaoKucunSear wuliaoKucunSear = new WuliaoKucunSear();
            wuliaoKucunSear.setDalei(dalei);
            wuliaoKucunSear.setDanwei(danwei);
            wuliaoKucunSear.setWuliaobianma(wuliaobianma);
            wuliaoKucunSear.setMingchengguige(mingchengguige);
            wuliaoKucunSear.setQichukucun(0.0);
            wuliaoKucunSear.setShourushuliang(0.0);
            wuliaoKucunSear.setFachushuliang(0.0);
            wuliaoKucunSear.setTuihuishuliang(0.0);
            wuliaoKucunSear.setJieyushuliang(0.0);
            i += wuliaoKucunSearMapper.insertSelective(wuliaoKucunSear);

            WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
            wuliaoKucunRiZhi.setDalei(dalei);
            wuliaoKucunRiZhi.setDanwei(danwei);
            wuliaoKucunRiZhi.setWuliaobianma(wuliaobianma);
            wuliaoKucunRiZhi.setMingchengguige(mingchengguige);
            wuliaoKucunRiZhi.setQichukucun(0.0);
            wuliaoKucunRiZhi.setShourushuliang(0.0);
            wuliaoKucunRiZhi.setFachushuliang(0.0);
            wuliaoKucunRiZhi.setTuihuishuliang(0.0);
            wuliaoKucunRiZhi.setJieyushuliang(0.0);

            i1 += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
        }
        if(i==i1 && i>0){
            return 1;
        }else if(i!=i1 && i>0){
            return 0;
        }else{
            return -1;
        }

    }

    @Override
    public List<WuliaoKucunSear> listKucunSelective(WuliaoKucunSear wuliaoKucunSear) {
        return wuliaoKucunSearMapper.listKucunSelective(wuliaoKucunSear);
    }

    @Override
    public int insertSelective(WuliaoKucunSear wuliaoKucunSear) {
        return wuliaoKucunSearMapper.insertSelective(wuliaoKucunSear);
    }

    @Override
    public int insertKucunWithDaohuoDetails(List<DaohuoDetails> daohuoDetailsList, DaohuoZong daohuoZong) {
        //获取单个物料详细
        //获取详细的甲供乙供,物料表备注,单位(包)
        //获取到货主表的入库库房 获取到货明细的物料名称(名称规格),根据这两项在kucunchaxun表中进行数据的更新
        //获取物料详细的到货数量

        //数量通过物料名称(名称规格)进行update操作 shourushuliang=shoushuruliang+daohuoInstance.daohuoshuliang
        return 0;
    }

    @Override
    public WuliaoKucunSear selectByPrimaryKey(Integer id) {
        return wuliaoKucunSearMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(WuliaoKucunSear wuliaoKucunSear) {
        return wuliaoKucunSearMapper.updateByPrimaryKeySelective(wuliaoKucunSear);
    }

    @Override
    public String getWuliaoKucunByWuliaoName(String mingchengguige, String rukukufang) {
        return wuliaoKucunSearMapper.getWuliaoKucunByWuliaoName(mingchengguige, rukukufang);
    }

    //    根据物料中的详细的物料名称和库房名称判定该项是否在物料库存中
    //需要将接收的类型 从到货单一个,转为相关的其它的或者用标识判定
    //如 daohuo , chuku , tuiku 的字符串 判定调用哪个方法
    //而这里的DaohuoDetails 和 DaohuoZong 也可以改为泛型
    @Override
    public int insertOrUpdateWuliaoDaohuoSelect(List<DaohuoDetails> daohuoDetailsList, DaohuoZong daohuoZong) {
        for (DaohuoDetails daohuoDetails : daohuoDetailsList) {
            //判断这里面的数据 , 有没有该库房下的该物料名,有的话执行新增
            String mingchengguigeEx = wuliaoKucunSearMapper.getWuliaoKucunByWuliaoName(daohuoDetails.getMingchengguige(), daohuoZong.getRukukufang());
            if (StringUtil.isNotEmpty(mingchengguigeEx)) {
                //如果根据物料名,库房名查回来的物料名不为空,则说明该库存下该物料已经存在于库存查询主表中
                //进行库存的到货量的累加
                wuliaoKucunSearMapper.updateWuliaoShouruShuliangByWuliaoName(daohuoDetails.getMingchengguige(), daohuoDetails.getDaohuoshuliang(), daohuoZong.getRukukufang());
            } else {
                //如果为空,则说明库存主表没这个物料,执行新增
                WuliaoKucunSear wuliaoKucunSear = new WuliaoKucunSear();
                wuliaoKucunSear.setMingchengguige(daohuoDetails.getMingchengguige());
                wuliaoKucunSear.setWuliaobianma(daohuoDetails.getWuliaobianma());
//                wuliaoKucunSear.setCreatetime(daohuoZong.getCreatetime());
                wuliaoKucunSear.setDalei(daohuoDetails.getDalei());
                wuliaoKucunSear.setDanwei(daohuoDetails.getDanwei());
                wuliaoKucunSear.setQichukucun(null);
                wuliaoKucunSear.setShourushuliang(daohuoDetails.getDaohuoshuliang());
                wuliaoKucunSear.setFachushuliang(null);
                wuliaoKucunSear.setTuihuishuliang(null);
                wuliaoKucunSear.setJieyushuliang(daohuoDetails.getDaohuoshuliang());
                wuliaoKucunSear.setJiagongyigong(daohuoDetails.getJiagongyigong());
                wuliaoKucunSear.setRukukufang(daohuoZong.getRukukufang()); //入库库房
                wuliaoKucunSear.setXiangmuweihu(daohuoZong.getXiangmumingcheng()); //项目名称
                //新增一个物料库存 其中只有到货量和结余数量 其中第一条,到货量一定=结余数量
                wuliaoKucunSearMapper.insertWuliaoDaohuoSelect(wuliaoKucunSear);
            }
            //不管主表有没有这个数据,都得插入子表日志中
            WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
            wuliaoKucunRiZhi.setMingchengguige(daohuoDetails.getMingchengguige());
            wuliaoKucunRiZhi.setWuliaobianma(daohuoDetails.getWuliaobianma());
//            wuliaoKucunRiZhi.setCreatetime(daohuoDetails.getCreatetime());
            wuliaoKucunRiZhi.setDalei(daohuoDetails.getDalei());
            wuliaoKucunRiZhi.setDanwei(daohuoDetails.getDanwei());
            wuliaoKucunRiZhi.setQichukucun(null);
            wuliaoKucunRiZhi.setShourushuliang(null);
//            wuliaoKucunRiZhiMapper.insertSelective()
        }//for - end
//        wuliaoKucunSearMapper.insertWuliaoDaohuoSelect()
        return 0;
    }

    @Override
    public int updateWuliaoShouruShuliangByWuliaoName(String mingchengguige, double daohuoshuliang, String rukukufang) {
        return wuliaoKucunSearMapper.updateWuliaoShouruShuliangByWuliaoName(mingchengguige, daohuoshuliang, rukukufang);
    }

    @Override
    public int updateWuliaoFachuShuliangByWuliaoName(String mingchengguige, double chukushuliang, String rukukufang) {
        return wuliaoKucunSearMapper.updateWuliaoFachuShuliangByWuliaoName(mingchengguige, chukushuliang, rukukufang);
    }

    @Override
    public int updateWuliaoPosunWeixiuByWuliaoName(String mingchengguige, double posunweixiuShuliang, String morenkufang) {
        return wuliaoKucunSearMapper.updateWuliaoPosunWeixiuByWuliaoName(mingchengguige, posunweixiuShuliang, morenkufang);
    }

    @Override
    public int updateWuliaoTuihuiShuliangByWuliaoName(String mingchengguige, double tuihuishuliang, String rukukufang) {
        return wuliaoKucunSearMapper.updateWuliaoTuihuiShuliangByWuliaoName(mingchengguige, tuihuishuliang, rukukufang);
    }

    @Override
    public int updateWuliaoJieyuShuliangByWuliaoName(String mingchengguige, String rukukufang) {
        return wuliaoKucunSearMapper.updateWuliaoJieyuShuliangByWuliaoName(mingchengguige, rukukufang);
    }

    @Override
    public List<WuliaoKucunSear> listKucunWithRiZhi(WuliaoKucunSear wuliaoKucunSear) {
        return wuliaoKucunSearMapper.listKucunWithRiZhi(wuliaoKucunSear);
    }
}
